package cn.hnbjx.prepaid.utils;

import cn.hnbjx.prepaid.common.BusinessException;
import cn.hnbjx.prepaid.common.BusinessStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

@Component
@Slf4j
@Service
public class FTPUtil {
//    // 协议名
//    private final static String HTTP = "http://";
//    // 域名
//    @Value("${base.domain}")
//    private String DOMAIN;
//    //图片存放在服务器的哪一个目录
//    @Value("${base.uploadPath}")
//    private String ROOTPATH;
//
//    public String setImage(MultipartFile file){
//        if (file.isEmpty()) {
//            throw new BusinessException(BusinessStatus.RESOURCE_NOT_EXISTS);
//        }
//        try {
//            //获得图片原始名称
//            String originalFilename = file.getOriginalFilename();
//            String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
//            // 更改图片名称
//            String uuidname = UUID.randomUUID().toString();
//            String fullName = uuidname + substring;
//            //图片路径
//            String fullUrl = HTTP + DOMAIN + "/upload/" + fullName;
//
//            File file1 = new File(ROOTPATH + fullName);
//            file.transferTo(file1);
//
//            return fullUrl;
//        } catch (IOException e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//@Value("${image.domain}")
//private String localDir;
//    @Value("${image.urlName}")
//    private String urlName;
       @Value("${base.domain}")
    private String localDir;
    //图片存放在服务器的哪一个目录
    @Value("${base.uploadPath}")
    private String urlName;
    private static Set<String> sets = new HashSet<>();

    static {
        sets.add(".jpg");
        sets.add(".png");
        sets.add(".gif");
        sets.add(".mp3");
        sets.add(".mp4");
        //......
    }

    /**
     * 1.校验图片的类型    a.jpg
     * 2.校验是否为恶意程序
     * 3.采用分目录方式进行存储
     * 4.防止文件重名 动态生成ID
     *
     * @param uploadFile
     * @return
     */

    public String setImage(MultipartFile uploadFile) {
        //1.获取图片名称   a.jpg | A.JPG
        String fileName = uploadFile.getOriginalFilename();
        fileName = fileName.toLowerCase();

        log.info("上传的文件名：{}", fileName);
        //2.校验是否为图片 .jpg
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (!sets.contains(fileType)) {
            //如果不属于类型,则表示不是图片
            throw new BusinessException(BusinessStatus.FAIL, "请上传正确的图片");
        }

        log.info("上传的文件后缀：{}", fileType);

        //3.校验是否为恶意程序  将数据转化为图片类型检查是否正常转化
        try {
            //4.hash方式/时间方式
            String dateDir = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());

            //5.定义磁盘文件存储的目录 D:/JT-SOFT/images/yyyy/MM/dd/
            String dirPath = urlName + dateDir;
            File dirFile = new File(dirPath);
            if (!dirFile.exists()) {
                dirFile.mkdirs();   //如果目录不存在 则创建文件.
            }

            //6.动态生成UUID
            String uuid = UUID.randomUUID().toString();
            String realFileName = uuid + fileType;


            log.info("上传的文件path：{}", dirPath + realFileName);

            //7.实现文件上传
            uploadFile.transferTo(new File(dirPath + realFileName));

            //磁盘地址: D:/JT-SOFT/images/yyyy/MM/dd/uuid.jpg
            //虚拟地址: http://image.jt.com/yyyy/MM/dd/uuid.jpg
            String url ="https://"+ localDir + "/upload" + dateDir + realFileName;
//            String url = dirPath + realFileName;
            log.info("上传的文件url：{}", url);

            return url;
        } catch (IOException e) {
            e.printStackTrace();
            throw new BusinessException(BusinessStatus.FAIL, "上传失败" + e.getLocalizedMessage());
        }
    }

}
